package kontroler;

import com.toedter.calendar.JDateChooser;
import model.Pracownik;
import model.WorkerTableModel;

import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Date;

/**
 * Autor: Robert Wołos
 * Date: 19.08.13
 */

public class Presenter {
    private JTextField imieTF;
    private JTextField nazwiskoTF;
    private JDateChooser dataUrodzeniaChooser;
    private JButton zapiszBtn;
    private JButton usunBtn;
    private JButton usunAllBtn;
    private JTable tabelaPracownikow;

    class SluchaczPrzyciskuDodaj implements ActionListener {
        @Override
        public void actionPerformed(ActionEvent e) {
            if (czyPoprawneDaneWFormularzu()) {
                if (!czyPracownikIstnieje()) {
                    String imie = imieTF.getText();
                    String nazwisko = nazwiskoTF.getText();
                    Date date = dataUrodzeniaChooser.getDate();
                    Pracownik pracownik = new Pracownik(imie, nazwisko, date);

                    WorkerTableModel workerTableModel = (WorkerTableModel) tabelaPracownikow.getModel();
                    workerTableModel.dodajPracownika(pracownik);
                    czyscDaneFormularza();
                } else {
                    pokazInfoZePracownikIstnieje();
                }
            } else {
                JOptionPane.showMessageDialog(
                        null,
                        "Pole z imieniem oraz nazwiskiem nie może być puste",
                        "Informacje",
                        JOptionPane.INFORMATION_MESSAGE
                );
            }
        }
    }

    private void pokazInfoZePracownikIstnieje() {
        JOptionPane.showMessageDialog(
                null,
                "Nie można dodać tego samego pracownika",
                "Inforacja",
                JOptionPane.INFORMATION_MESSAGE
        );
    }

    class SluchaczPrzyciskuUsun implements ActionListener {
        @Override
        public void actionPerformed(ActionEvent e) {
            int nrWiersza = tabelaPracownikow.getSelectedRow();
            if (nrWiersza == -1) {
                JOptionPane.showMessageDialog(
                        null,
                        "Nie zaznaczono zadnego wiersza",
                        "Informacja",
                        JOptionPane.INFORMATION_MESSAGE);
            } else {
                WorkerTableModel workerTableModel = (WorkerTableModel) tabelaPracownikow.getModel();
                workerTableModel.usunPracownika(nrWiersza);
            }
        }
    }

    class SluchaczPrzyciskuUsunAll implements ActionListener {

        @Override
        public void actionPerformed(ActionEvent e) {
            WorkerTableModel workerTableModel = (WorkerTableModel) tabelaPracownikow.getModel();
            int iloscWierszy = workerTableModel.getRowCount();
            if (iloscWierszy == 0)
                JOptionPane.showMessageDialog(null, "Tabela jest pusta", "Informacja", JOptionPane.INFORMATION_MESSAGE);
            else
                workerTableModel.usunAllPracownikow();
        }
    }

    public boolean czyPoprawneDaneWFormularzu() {
        if (imieTF.getText().equals("") || nazwiskoTF.getText().equals(""))
            return false;
        else
            return true;
    }

    public boolean czyPracownikIstnieje() {
        WorkerTableModel workerTableModel = (WorkerTableModel) tabelaPracownikow.getModel();
        return workerTableModel.czyPracownikIstnieje(imieTF.getText(), nazwiskoTF.getText());
    }

    public void czyscDaneFormularza() {
        imieTF.setText("");
        nazwiskoTF.setText("");
        dataUrodzeniaChooser.setDate(new Date());
    }

    public void setImieTF(JTextField imieTF) {
        this.imieTF = imieTF;
    }

    public void setNazwiskoTF(JTextField nazwiskoTF) {
        this.nazwiskoTF = nazwiskoTF;
    }

    public void setDataUrodzeniaChooser(JDateChooser dataUrodzeniaChooser) {
        this.dataUrodzeniaChooser = dataUrodzeniaChooser;
    }

    public void setZapiszBtn(JButton zapiszBtn) {
        this.zapiszBtn = zapiszBtn;
        this.zapiszBtn.addActionListener(new SluchaczPrzyciskuDodaj());
    }

    public void setUsunBtn(JButton usunBtn) {
        this.usunBtn = usunBtn;
        this.usunBtn.addActionListener(new SluchaczPrzyciskuUsun());
    }

    public void setUsunAllBtn(JButton usunAllBtn) {
        this.usunAllBtn = usunAllBtn;
        this.usunAllBtn.addActionListener(new SluchaczPrzyciskuUsunAll());
    }

    public void setTabelaPracownikow(JTable tabelaPracownikow) {
        this.tabelaPracownikow = tabelaPracownikow;
    }
}
